/**
 * @file CLink_Export.h
 * @brief 定义库导出/导入宏
 * 
 * 此文件定义了用于标记导出/导入符号的宏，在Windows平台上使用DLL导出/导入属性，
 * 在Linux/Unix平台上使用可见性属性或不做特殊处理。
 */

#pragma once

// 平台检测宏定义
#if defined(_WIN32) || defined(_WIN64)
    // Windows平台 (包括32位和64位)
    #define CLINK_PLATFORM_WINDOWS 1
    #define CLINK_PLATFORM_NAME "Windows"
#elif defined(__ANDROID__)
    // Android平台
    #define CLINK_PLATFORM_ANDROID 1
    #define CLINK_PLATFORM_NAME "Android"
#elif defined(__linux__)
    // Linux平台
    #define CLINK_PLATFORM_LINUX 1
    #define CLINK_PLATFORM_NAME "Linux"
#elif defined(__APPLE__) && defined(__MACH__)
    // macOS/iOS平台
    #if TARGET_OS_IPHONE
        #define CLINK_PLATFORM_IOS 1
        #define CLINK_PLATFORM_NAME "iOS"
    #else
        #define CLINK_PLATFORM_MACOS 1
        #define CLINK_PLATFORM_NAME "macOS"
    #endif
#else
    #error "Unsupported platform - CLink currently supports Windows, Linux, macOS, iOS and Android"
#endif

// 根据平台设置导出宏
#if defined(CLINK_PLATFORM_WINDOWS)
    // Windows平台特定设置
    #if defined(CLINK_BUILDING_DLL)
        // 构建库时导出符号
        #define CLINK_API __declspec(dllexport)
    #else
        // 使用库时导入符号
        #define CLINK_API __declspec(dllimport)
    #endif
#else
    // Linux/Unix平台
    #define CLINK_API
#endif

// 用于标记类导出
#define CLINK_CLASS CLINK_API

// 用于标记函数导出
#define CLINK_FUNCTION CLINK_API

// 用于标记变量导出
#define CLINK_VARIABLE CLINK_API